<?php



/*
	### 递归创建目录
	### 参一：目录路径
*/
function Mkdirs($p){
	if(!is_dir($p)){
		Mkdirs(dirname($p),0777,true);
		mkdir($p);
	}
}




//递归删除目录及文件
function DelDirs($p){
	if(is_file($p)){
		unlink($p);
	}
	if(is_dir($p)){
		$op = opendir($p);
		while($rd = readdir($op)){
			if($rd == '.' || $rd == '..'){
				continue;
			}
			$p2 = $p.'/'.$rd;
			DelDirs($p2);
		}
		rmdir($p);
		closedir($op);
	}
}






//打印信息
function dump($data,$stat=false){
	echo '<pre>';
		var_dump($data);
	echo '</pre>';
	if($stat){
		exit;
	}
}




/*
	### 合并数据及参数并转换成json并缓存
		参一：要转成json的源数据
		参二：缓存文件的存放位置,空为不缓存
		参三：需要合并参数的关联数组
		//参四：是否合拼当前时间戳(js位数的)
		参四：是直显还是return json数据，默认false为直显数据
		示例：
			Merge_Or_Make_Cache($res,'',array());
			或
			$res2 = Merge_Or_Make_Cache($res,'Cache/aa',array('a'=>'aaaa'),1,1);
			echo $res2;
*/
function Merge_Or_Make_Cache($data,$cache_path,$arr=array(),$is_return=false){
	if(is_array($arr) && count($arr) > 0){
		foreach($arr as $k=>$v){
			$info[$k] = $v;
		}
	}
	$info['data'] = $data;
	$cache = json_encode($info);
	if($cache_path != ''){
		$dir = dirname($cache_path);
		if(!is_dir($dir)){
			Mkdirs($dir);
		}
		file_put_contents($cache_path, $cache);
	}
	if($is_return){
		return $cache;
	}else{
		echo $cache;
	}
}















/*
	###  获取指定日期的年月日当天零时的时间戳
		参一：$tag 获取哪天的的标记 如：要获取昨天的'-1 day'

		示例：
			echo $a = GetDateYmd('-1 day');		//1525968000
			echo date('Y-m-d H:i:s',$a);		//2018-05-11 00:00:00

*/
function GetDateYmd($tag){
	return strtotime(date('Y-m-d',strtotime($tag,time())));
}









/*
	### 永久缓存数据
	参一：缓存的名 (string)
	参二：缓存的值（string）
	return：
		当只有参一时是获取缓存并返回空或对应的值
		当有两个参数时是设置缓存，无返回值
	示例：
		S('a','aaa');	//设置
		echo S('a');	//获取
*/
function S($k,$v=false){
	$p = 'Cache/Sess/'.$k;
	if($v === ''){
		if(is_file($p)){
			unlink($p);
		}
		return;
	}
	if($v !== false){
		if(!is_dir(dirname($p))){
			Mkdirs(dirname($p));
		}
		file_put_contents($p,$v);
	}else{
		if(!is_file($p)){
			return;
		}
		return file_get_contents($p);
	}
}












/*
	### 微信公众号向特定关注用户发送模板信息
	参一：发送信息的数组
	return：返回操作状态字串 如：{"errcode":0,"errmsg":"ok","msgid":383394536703213568}
	注：
		1：需要在公众号 “基本配置 =》 ip白名单”  中设置请求access_token的ip白名单
		2：在公众号 “功能 =》 模板消息” 中选定并添加模板后，在"我的模板"中才会看到模板id。
	示例：
		//挪车模板
		$formwork =array(
			//'touser'=>'omTFa04k8h7CQlYUExqxX8q-gfR8',//用户openid free loop
			'touser'=>'omTFa02CiCTgB5FqQ4cHDcI7txX1A',//free loop2
			//'touser'=>'omTFa0-BG8RpFFRgZYTojLGCEWVk',
			//'touser'=>'omTFa01Wm3muXDPrCYDT-uVkwqAc',
			'template_id'=>'JRkXQcpMYreNuxQ3wTFOXCniQ9htDeDoo1e1Kw0r9oQ',	//挪车模板id
			'data'=>array(	//推送模板中对应的数据
				'first'=>array('value'=>'尊敬的用户您好，您有一条挪车请求。请尽快处理!','color'=>'#ff0000'),
				'keyword1'=>array('value'=>'挪车通知','color'=>'#00ff00'),
				'keyword2'=>array('value'=>'吉EEJ355','color'=>'#0000ff'),
				'keyword3'=>array('value'=>date('Y-m-d H:i:s'),'color'=>'#0000ff'),
				'remark'=>array('value'=>'感谢您使用前行微信挪车服务！祝您生活愉快！','color'=>'#173177')
			)
		);
		$res = sent_template_msg($formwork);
		var_dump($res);
*/
function sent_template_msg($formwork){
	$access_token = file_get_contents('http://www.bmxx8.top/wx_get_access_token/index.php?token=123');
	$formwork = json_encode($formwork);
	//发送请求
	$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$access_token}";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
	curl_setopt($ch, CURLOPT_POST,1);
	curl_setopt($ch, CURLOPT_POSTFIELDS,$formwork);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}










/*
	### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
	### 参一：源字串 
	### 参二：是否反解析，默认false为特殊字符转实体
	### return : 返回替换后的字串
	### 示例：
		$b = ChangeChar($a);	//转实体
		$val2 = ChangeChar($val,1); //实体转字符
*/
function ChangeChar($val,$stat=false){
	if($stat){
		$p = '/&#60/';
		$val = preg_replace($p,"<",$val);
		$p = '/&#62/';
		$val = preg_replace($p,">",$val);
		$p = '/&#39/';
		$val = preg_replace($p,"'",$val);
		$p = '/&#34/';
		$val = preg_replace($p,'"',$val);
		$p = '/&#47/';
		$val = preg_replace($p,"/",$val);
		$p = '/&#92/';
		$val = preg_replace($p,"\\",$val);
		$p = '/&nbsp/';
		$val = preg_replace($p," ",$val);
		return $val;
	}else{
		$p ='/</';
		$val = preg_replace($p,"&#60",$val);
		$p ='/>/';
		$val = preg_replace($p,"&#62",$val);
		$p ="/'/";
		$val = preg_replace($p,"&#39",$val);
		$p ='/"/';
		$val = preg_replace($p,"&#34",$val);
		$p = '/\//';
		$val = preg_replace($p,"&#47",$val);
		$p = '/\\\/';
		$val = preg_replace($p,"&#92",$val);
		$p = '/\s/';
		$val = preg_replace($p,"&nbsp",$val);
		return $val;
	}
}





/*
	### 接收POST,GET,REQUEST数据，并处理特殊字符
	参一：接收名
	参二：默认空为get方式，get|post|all (request)
	return：返回将特殊字符处理后的数据
	示例：
		$number = I('number','post');
*/
function I($name,$type=''){
	switch($type){
		case 'post':
			$val = @$_POST[$name];
		break;
		case 'all':
			$val = @$_REQUEST[$name];
		break;
		default:
			$val = @$_GET[$name];
		break;
	}
	//return ChangeChar($val,1);
	return ChangeChar($val);
}